home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / device-mapper.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  3KB  |  131 lines

  1. /*
  2.  * Copyright (C) 2001 Sistina Software (UK) Limited.
  3.  * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
  4.  *
  5.  * This file is released under the LGPL.
  6.  */
  7.  
  8. #ifndef _LINUX_DEVICE_MAPPER_H
  9. #define _LINUX_DEVICE_MAPPER_H
  10.  
  11. struct dm_target;
  12. struct dm_table;
  13. struct dm_dev;
  14.  
  15. typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t;
  16.  
  17. union map_info {
  18.     void *ptr;
  19.     unsigned long long ll;
  20. };
  21.  
  22. /*
  23.  * In the constructor the target parameter will already have the
  24.  * table, type, begin and len fields filled in.
  25.  */
  26. typedef int (*dm_ctr_fn) (struct dm_target *target,
  27.               unsigned int argc, char **argv);
  28.  
  29. /*
  30.  * The destructor doesn't need to free the dm_target, just
  31.  * anything hidden ti->private.
  32.  */
  33. typedef void (*dm_dtr_fn) (struct dm_target *ti);
  34.  
  35. /*
  36.  * The map function must return:
  37.  * < 0: error
  38.  * = 0: The target will handle the io by resubmitting it later
  39.  * > 0: simple remap complete
  40.  */
  41. typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio,
  42.               union map_info *map_context);
  43.  
  44. /*
  45.  * Returns:
  46.  * < 0 : error (currently ignored)
  47.  * 0   : ended successfully
  48.  * 1   : for some reason the io has still not completed (eg,
  49.  *       multipath target might want to requeue a failed io).
  50.  */
  51. typedef int (*dm_endio_fn) (struct dm_target *ti,
  52.                 struct bio *bio, int error,
  53.                 union map_info *map_context);
  54.  
  55. typedef void (*dm_presuspend_fn) (struct dm_target *ti);
  56. typedef void (*dm_postsuspend_fn) (struct dm_target *ti);
  57. typedef void (*dm_resume_fn) (struct dm_target *ti);
  58.  
  59. typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
  60.                  char *result, unsigned int maxlen);
  61.  
  62. typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
  63.  
  64. void dm_error(const char *message);
  65.  
  66. /*
  67.  * Constructors should call these functions to ensure destination devices
  68.  * are opened/closed correctly.
  69.  * FIXME: too many arguments.
  70.  */
  71. int dm_get_device(struct dm_target *ti, const char *path, sector_t start,
  72.           sector_t len, int mode, struct dm_dev **result);
  73. void dm_put_device(struct dm_target *ti, struct dm_dev *d);
  74.  
  75. /*
  76.  * Information about a target type
  77.  */
  78. struct target_type {
  79.     const char *name;
  80.     struct module *module;
  81.         unsigned version[3];
  82.     dm_ctr_fn ctr;
  83.     dm_dtr_fn dtr;
  84.     dm_map_fn map;
  85.     dm_endio_fn end_io;
  86.     dm_presuspend_fn presuspend;
  87.     dm_postsuspend_fn postsuspend;
  88.     dm_resume_fn resume;
  89.     dm_status_fn status;
  90.     dm_message_fn message;
  91. };
  92.  
  93. struct io_restrictions {
  94.     unsigned short        max_sectors;
  95.     unsigned short        max_phys_segments;
  96.     unsigned short        max_hw_segments;
  97.     unsigned short        hardsect_size;
  98.     unsigned int        max_segment_size;
  99.     unsigned long        seg_boundary_mask;
  100. };
  101.  
  102. struct dm_target {
  103.     struct dm_table *table;
  104.     struct target_type *type;
  105.  
  106.     /* target limits */
  107.     sector_t begin;
  108.     sector_t len;
  109.  
  110.     /* FIXME: turn this into a mask, and merge with io_restrictions */
  111.     /* Always a power of 2 */
  112.     sector_t split_io;
  113.  
  114.     /*
  115.      * These are automatically filled in by
  116.      * dm_table_get_device.
  117.      */
  118.     struct io_restrictions limits;
  119.  
  120.     /* target specific data */
  121.     void *private;
  122.  
  123.     /* Used to provide an error string from the ctr */
  124.     char *error;
  125. };
  126.  
  127. int dm_register_target(struct target_type *t);
  128. int dm_unregister_target(struct target_type *t);
  129.  
  130. #endif                /* _LINUX_DEVICE_MAPPER_H */
  131.